 #include <sys/types.h>
       #include <sys/ipc.h>
       #include<stdio.h>
       #include<stdlib.h>
         #include <sys/ipc.h>
       #include <sys/shm.h>
       #define GETKEY_ERR -1
       #define GETSHM_ERR -2
       #define SIZE 4096
       #define MODE 0666
       const char*pathname="/home/LDCWD/";
       int projectid=111111;
int GetKey()
{
    key_t key=ftok(pathname,projectid);//通过这两个参数来运算获取一个概率较低会冲突的值
    if(key<0)
    {
        //获取失败
        printf("GetKey error!!\n");
        exit(GETKEY_ERR);//获取失败退出程序
    }
    return key;
}
int ShmGet(int shmflg)//通过传入shmflg来决定是创建还是获取共享内存
{
    int key=GetKey();
   int n= shmget(key,SIZE,shmflg);
   if(n<0)
   {
    printf("shmget error!!\n");
    exit(GETSHM_ERR);
   }
   return n;
}
int CreateShm()//创建
{
   return ShmGet(IPC_CREAT|IPC_EXCL|MODE);
}
int GetShm()//获取
{
    return ShmGet(IPC_CREAT);
}
